package com.pe.pgn.clubpgn.service.impl;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.pe.pgn.clubpgn.common.CLPConstantes;
import com.pe.pgn.clubpgn.dao.BonoManualDao;
import com.pe.pgn.clubpgn.domain.ClpmBonoClientePersona;
import com.pe.pgn.clubpgn.service.BonoManualService;
import com.pe.pgn.clubpgn.webapp.util.CalendarUtil;

@Service("bonoManualService")
public class BonoManualServiceImpl extends GenericManagerImpl<ClpmBonoClientePersona,Long> 
	implements BonoManualService{

	@Autowired private BonoManualDao bonoManualDao;
	
	public List<ClpmBonoClientePersona> listarBonosManuales() {
		return bonoManualDao.listarBonosManuales();
	}

	public List<ClpmBonoClientePersona> buscarBonosManuales(
			ClpmBonoClientePersona bonomanual) {
		
		
		try{
        	CalendarUtil.stringToCalendar(CLPConstantes.DATE_PATTERN, bonomanual.getIniFechaVencimiento());
        }catch(Exception e){
        	bonomanual.setIniFechaVencimiento(""); //entra aca si el parametro dado no es una fecha
        }
        
        try{
        	CalendarUtil.stringToCalendar(CLPConstantes.DATE_PATTERN, bonomanual.getFinFechaVencimiento());
        }catch(Exception e){
        	bonomanual.setFinFechaVencimiento(""); //entra aca si el parametro dado no es una fecha
        }
		
		return bonoManualDao.buscarBonosManuales(bonomanual);
	}

	public ClpmBonoClientePersona obtenerBonoManual(Long id) {
		return bonoManualDao.obtenerBonoManual(id);
	}

	public Map<String, Object> guardarBonoManual(ClpmBonoClientePersona bonomanual) {
		
		Map<String,Object> map = new HashMap<String,Object>();
		String coCodeEstacionGeneracion = bonomanual.getCoCodeEstacionGeneracion();
		String coCodeEstacionConsumo = bonomanual.getCoCodeEstacionConsumo();
		String coVentaGeneracion = bonomanual.getCoVentaGeneracion();
		String coPromocionBono = bonomanual.getCoPromocionBono();
		String fechaGeneracion = bonomanual.getFechaGeneracion();
		String coVentaConsumo = bonomanual.getCoVentaConsumo();		
		String coTipoBono = bonomanual.getCoTipoBono();
		
		map = verificarPromocionDisponible(coPromocionBono);
		if(map.get(CLPConstantes.MSG).equals(CLPConstantes.ERROR)){
			return map;
		}
		
		if(!coVentaGeneracion.equals("")){			
			map = verificarVentaGeneracion(coVentaGeneracion, coPromocionBono, coCodeEstacionGeneracion);
			if(map.get(CLPConstantes.MSG).equals(CLPConstantes.ERROR) && 
				!"no_aplica_estacion_generacion".equals(map.get("detalle"))){
				
				return map;
			}
		}
		
		if(!coVentaConsumo.equals("")){
			map = verificarVentaConsumo(coVentaConsumo, coPromocionBono, coTipoBono, fechaGeneracion, coCodeEstacionConsumo);
			if(map.get(CLPConstantes.MSG).equals(CLPConstantes.ERROR) && 
				!"no_aplica_estacion_consumo".equals(map.get("detalle"))){
				return map;
			}
		}	
		
		return bonoManualDao.guardarBonoManual(bonomanual);
	}

	public Map<String, Object> verificarPromocionDisponible(String coPromocionBono) {
		return bonoManualDao.verificarPromocionDisponible(coPromocionBono);
	}

	public int eliminarBonoManual(Long id) {
		return bonoManualDao.eliminarBonoManual(id);
	}

	public Map<String,Object> obtenerCantidadBonosPorVenta(String coVentaGeneracion, String coPromocionBono) {
		return bonoManualDao.obtenerCantidadBonosPorVenta(coVentaGeneracion, coPromocionBono);
	}

	public Map<String, Object> verificarVentaConsumo(String coVentaConsumo, String coPromocionBono, 
		String coTipoBono, String fechaGeneracion, String coCodeEstacion) {
		return bonoManualDao.verificarVentaConsumo(coVentaConsumo, coPromocionBono, coTipoBono, fechaGeneracion, coCodeEstacion);
	}

	public Map<String, Object> verificarVentaGeneracion(String coVentaGeneracion, String coPromocionBono, String coCodeEstacion) {
		return bonoManualDao.verificarVentaGeneracion(coVentaGeneracion, coPromocionBono, coCodeEstacion);
	}
}
